Maven
✒️ 2025-06-28 19:35 내용 수정
참고 자료 : 갓대희's 작은공간 maven이란(정의, 예제), Geeksforgeeks Difference between Gradle and Maven, Java Code Geeks Maven and Gradle: A Side-by-Side Comparison
Maven
Java 프로젝트를 위한 빌드 자동화 도구
- 참고 자료 : 위키백과 아파치 메이븐
- Apache software 재단에 의해 관리되며,
pom.xml파일을 통해 정형화된 빌드 시스템으로 프로젝트를 관리해준다. pom.xml파일에 필요한 라이브러리를 정의해두면 해당 라이브러리와 그 라이브러리 작동에 필요한 다른 라이브러리까지 네트워크를 통해 자동으로 다운로드 해준다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>library</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>library Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>library</finalName>
</build>
</project>
- 장점
- XML 구조로 접근성이 좋다.
- 프로젝트 빌드 과정이 단순하고, 프로젝트 구조가 표준화되어 있어 안정적이다.
- 다양한 IDE에서 지원한다.
- 플러그인 적용이 쉽다.
- 단점
- 초보자가 채우기엔 XML 구조로 인해 조금 어려울 수 있다.
- 프로젝트 실행 시 속도가 느리다.
- 복잡한 빌드 로직 구현이 어렵다.
POM(Project Object Model)
프로젝트의 다양한 정보를 처리하기 위한 객체 모델
- 프로젝트의 root에 존재하는 pom.xml 파일이며, 프로젝트의 환경 설정과 의존성 등을 확인할 수 있다.
| 태그 | 설명 |
|---|---|
<project> |
프로젝트 정보 |
<modelVersion> |
Maven의 모델 버전 |
<groupId> |
프로젝트를 생성한 그룹명. 일반적으로 도메인 이름을 거꾸로 작성 |
<artifactId> |
프로젝트 빌드 시 버전 정보를 생략한 파일 이름 |
<version> |
프로젝트의 현재 버전. x.0.0 형식으로 표기하며, 개발중일 땐 SNAPSHOT 표기 |
<packaging> |
패키징 유형. jar, war, zip 등을 작성 |
<name> |
프로젝트 이름 |
<description> |
프로젝트에 대한 설명 |
<properties> |
프로젝트에서 사용하는 속성값들을 정의하며, pom.xml 문서 내에서 사용 가능 |
<dependencies> |
프로젝트와 의존 관계에 있는 라이브러리를 관리. 각 라이브러리는 <dependency>로 작성 |
<plugin> |
빌드에 사용할 플러그인 |
Build
- 프로젝트를 위해 작성한 Java 코드나 여러 자원들을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물 이다.
- 자원들에는
.xml,.jar,.properties파일 등이 있다.
- 자원들에는
- 컴파일 작업과 테스팅, 검사, 배포까지의 작업들을 합쳐 부른다.
Maven LifeCycle
- Maven은 표준화된 Build 생명 주기를 가진다.
| Phase | 설명 |
|---|---|
| Default(Build) | 일반적인 빌드 프로세스 모델 |
| Clean | 빌드 시 생성되었던 파일들을 삭제 |
| Validate | 프로젝트가 올바른지 확인, 필요한 모든 정보를 사용할 수 있는지 확인 |
| Compile | 프로젝트의 소스 코드를 컴파일 |
| Test | 유닛 테스트를 수행 |
| Package | 컴파일된 소스 코드와 리소스들을 jar, war 등의 배포용 패키지로 압축 |
| Verify | 통합 테스트 결과에 대한 검사를 실행. 품질 기준을 충족하는지 확인 |
| Install | 패키지를 로컬 저장소에 설치 |
| Site | 프로젝트 문서와 사이트를 작성 및 생성 |
| Deploy | 생성된 package를 원격 저장소에 release |
- 빌드는 Compile -> Test -> Package 순으로 진행된다.
- Compile : src/main/java 디렉터리 아래의 모든 소스 코드를 컴파일
- Test : src/test/java, src/test/resource 디렉터리의 테스트 자원 복사 및 소스 컴파일
- Package : 컴파일과 테스트 완료 후 jar나 war 형태로 압축